https://github.com/gincheong/telegram-notification-bot
궁금하게 생긴 앱은 한 번씩 다운받아서 써 보는 편이다.
텔레그램 메신저도 그 중 하나이고
몇 친구들끼리 카카오톡 대신 텔레그램 한 번 써보자고 해서, 단체로 잠깐 톡방을 옮겨간 적이 있었다.
(지금 텔레그램이 워낙 흉흉한 걸로 많이 엮여서 이미지가 상당히 안 좋긴 한데.. 나랑 친구들은 우리끼리 잡담밖에 안 했다.)
내가 아는 모든 사람들이 텔레그램으로 메신저를 옮긴 것도 아니라서, 카카오톡을 안 쓸 순 없었다.
그렇게 두 개를 며칠 비교하면서 써 봤는데 텔레그램에는 "키워드 알림"기능이 없더라?
마침 텔레그램에는 챗봇을 사용자가 만들어 쓸 수 있게 제공하는데, 공식 API를 통해서 이 챗봇의 기능을 코드로 구현할 수도 있었다.
만들어볼까 싶은 마음이 들어 웹서핑을 했다..
역시나 나보다 먼저 관심을 가졌던 사람들이 있었는지, "텔레그램 키워드 알림"이 구글에서 검색어 자동 완성으로 추천되고 있었다.
검색하니 클리앙이라는 사이트에 올라온 글이 상단에 노출되었는데 나와 동일한 수요를 가진 누군가의 글이였다.
이 글을 포함해서 다른 검색 결과에도 별다른 해결책은 없었고, 본격적으로 직접 만들기에 돌입하기로 했다.
https://python-telegram-bot.org/
봇 개발을 파이썬으로 하면 뚝딱 된다고 해서, 파이썬을 키워드로 검색했더니
텔레그램 API를 Wrapping한 라이브러리 하나를 찾게 됐다. 이걸 사용하기로 했음
봇이 동작하는 방식을 이리저리 테스트해보고, 다음의 방식으로 동작하는 봇을 구현하기로 했다.
어떤 사용자가 어떤 키워드로 어떤 그룹방에서 알림을 받을 지 설정한 내용이 저장되어야 했기에, 데이터베이스가 필요했다.
https://firebase.google.com/docs/database?hl=ko
나는 돈이 없었다. 무료 데이터베이스 서비스를 찾다 요걸 찾게 됐다.
NoSQL이라서 테이블을 생성하고 관리해줘야하는 RDB들보다 훨씬 쉽게 쓸 수 있을 것 같았다.
마침 python으로 라이브러리를 제공해주어서, 간단하게 도입했다.
- root
- users
- {user_id}
- keywords: {string[]}
- group_ids: {number[]}
- {user_id}
- keywords: {string[]}
- group_ids: {number[]}
...
- groups
- {group_id}
- user_ids: {number[]}
- {group_id}
- user_ids: {number[]}
...
대충 이런 식으로 구조를 잡았다.
사용자 한 명당 사용자가 등록한 키워드 리스트, 사용자가 알림을 활성화한 그룹 채팅방의 id 리스트를 갖는다.
그리고 그룹 한 개당 등록된 사용자의 id 리스트를 등록한다.
(RDB를 썼다면 user_id랑 group_id가 이중으로 관리되는 문제를 훨씬 안전하게 해결했을 것 같은데.. 이 땐 그냥 생각이 그냥 그냥 없었음)
이 구조를 기반으로 기능 구현을 좀 더 구체화해봤다.
중간의 시행착오 및 자잘한 예외처리(자기 자신의 메시지는 무시, 그룹 채팅방과 개인 채팅방 구분 등..)들을 거쳐 최소 기능의 구현을 마쳤다.
구현한 기능을 상시로 동작시키려면 내가 짠 스크립트를 24시간 돌려야 했다. 집 컴퓨터를 켜두고 다니는 건 멋지지 않다.
그리고 나 말고 다른 친구들도 이 기능을 쓰게 하고 자랑하고 싶었다. 배포를 해야 했다.
역시나 무료 서비스를 우선 검색했고 AWS를 선정했다. 후보군으로 Heroku도 있긴 했지만 무료 플랜인 경우에는 24시간을 풀로 실행할 수 없다는 점이 걸려 탈락.
AWS는 신규 계정에 대해 t2.micro라는 스펙의 서버를 1년 무료로 제공한다. 바로 가입 후 인스턴스를 생성했다.
파이썬 라이브러리를 설치하고, 파이어베이스 key를 업로드하고, 스크립트를 실행하고 텔레그램에서 테스트.
이제 내 컴퓨터를 꺼 두고도 봇이 돌아가기 시작했다.
모르는 걸 찾아가면서 느릿느릿 띄엄띄엄 개발을 마치고 났을 이 시점엔 이미 친구들이 텔레그램에 흥미가 떨어져서 다시 카카오톡으로 되돌아갔다.
결과적으로 내가 만든 봇을 써 볼 친구가 남지 않았다. 나는 모르는 사람이라도 내 봇을 썼으면 좋겠다고 생각했다.
개발 시작하기 전에 본 클리앙의 게시글을 기억해뒀던 나는 트래픽을 이용해먹기 위해 이 사이트에 가입해서 해당 글에 댓글을 달았다. https://www.clien.net/service/board/kin/10937513
그리고 별도의 게시글도 작성했다. https://www.clien.net/service/board/lecture/13410160
이걸론 왠지 부족하단 느낌이 들었고, 보다 내가 관리할 수 있는 플랫폼에 글을 올려두는 게 편리하지 않을까 생각했다.
그래야 방문자 추적도 용이하지 않겠음? 블로그로 글을 작성하기로 했다.
내 경험상 구글 검색에 자주 노출되는 블로그 플랫폼을 쓰면 되지 않을까 싶었다. 그렇게 티스토리 블로그에 "텔레그램 키워드 알림" 이라는 키워드를 담은 글을 작성했다. https://desree.tistory.com/33
그리고 개발자의 블로그라고 할 수 있는 Github.
작업을 한 레포지토리의 Readme를 작성했다. https://github.com/gincheong/telegram-notification-bot/blob/master/README.md
지금도 "텔레그램 키워드 알림" 으로 검색하면 위의 글들이 첫 페이지에 노출된다. 블로그의 유입 키워드도 비슷한 것들이다.
아직도 텔레그램 메신저로 봇 사용에 대한 문의를 보내는 사람들도 있다.
어떤 사람은 고맙다고 비타500 기프티콘을 보내준 적도 있다.
흔히 말하는 "서비스를 개발하고 운영해본 경험"에 아주 잘 부합하는 매우 재밌는 프로젝트였다.
2019년 3월 29일을 시작으로
AWS 프리 티어 기간이 끝나 매달 만 원씩 소박하게 서버비를 지출하면서
등록된 사용자 수 335개, 그룹 수 145개, 키워드 수 805개가 등록되어
소소하게 돌아갔던 서비스는 2023년 8월 7일 운영을 중단하게 되었는데.. 다음 화에 더보기